package com.shimmer;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

/**
 * @Package com.shimmer
 * @Author shimmer
 * @Date 2020/8/15 22:05
 * @TODO request对象的类是HttpServletRequest，提供了很多有实用价值的方法
 */
public class RequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
        // 获取信息
        System.out.println("浏览器发出请求时的完整URL，包括协议 主机名 端口(如果有): " + request.getRequestURL());
        System.out.println("浏览器发出请求的资源名部分，去掉了协议和主机名: " + request.getRequestURI());
        System.out.println("请求行中的参数部分: " + request.getQueryString());
        System.out.println("浏览器所处于的客户机的IP地址: " + request.getRemoteAddr());
        System.out.println("浏览器所处于的客户机的主机名: " + request.getRemoteHost());
        System.out.println("浏览器所处于的客户机使用的网络端口: " + request.getRemotePort());
        System.out.println("服务器的IP地址: " + request.getLocalAddr());
        System.out.println("服务器的主机名: " + request.getLocalName());
        System.out.println("得到客户机请求方式: " + request.getMethod());
        
        // 获取参数
        // request.getParameter(): 是常见的方法，用于获取单值的参数
        // request.getParameterValues(): 用于获取具有多值的参数，比如注册时候提交的 "hobbies"，可以是多选的。
        // request.getParameterMap(): 用于遍历所有的参数，并返回Map类型。

        System.out.println("=====================头部信息=============================");
        // 获取头部信息
        // host: 主机地址
        // user-agent: 浏览器基本资料
        // accept: 表示浏览器接受的数据类型
        // accept-language: 表示浏览器接受的语言
        // accept-encoding: 表示浏览器接受的压缩方式，是压缩方式，并非编码
        // connection: 是否保持连接
        // cache-control: 缓存时限
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String header = headerNames.nextElement();
            String value = request.getHeader(header);
            System.out.printf("%s\t%s%n",header,value);
        }

    }
}
